
import Vue from 'vue'
import wx from 'weixin-js-sdk'
import { isWechat } from '@/libs/utils'
import { getWechatSignature } from '@/libs/service'

const wxConfig = {
    /*
    * @shareCallBack: 分享成功后的回调函数 默认null
    * @shareData: 分享标题等参数 默认null
    * @readyCallBack: 初始化成功后回调 如需一开始就调用定位需要在这回调后 默认null
    *
    */
    init: function (shareCallBack, shareData, readyCallBack) {
        getWechatSignature().then(res => {
            var config = res
            wxConfig.ready(config, shareCallBack, shareData, readyCallBack)
        })
    },
    ready: function (config, shareCallBack, shareData, readyCallBack) {
        //  iOS在页面加载时只需签名一次且需要记录第一次的地址 后续签名都用该地址来签名 Android每次history变更都签名 恶心的坑
        var appId = config.appId
        var timestamp = config.timestamp
        var nonceStr = config.nonceStr
        var signature = config.signature
        var $host = process.env.VUE_APP_HOST + process.env.VUE_APP_PROJECT_CONTEXT
        var shareUrl = ''
        if (isWechat()) {
            // 微信客户端时打开loading等初始化后关闭
            Vue.prototype.$loading()
        }
        wx.config({
            beta: true,
            debug: false, // 开启调试模式
            appId: appId, // 必填，公众号的唯一标识
            timestamp: timestamp, // 必填，生成签名的时间戳
            nonceStr: nonceStr, // 必填，生成签名的随机串
            signature: signature, // 必填，签名，见附录1
            jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'getLocation', 'openLocation', 'scanQRCode']
        })

        if (shareData) {
            // 判断域名传过来的分享地址是域名还是路由地址
            shareUrl = shareData.url.indexOf('http') > -1 ? shareData.url : $host + shareData.url
        } else {
            // 没传分享参数默认分享首页
            shareUrl = `${$host}/index`
        }

        wx.ready(function () {
            // 分享朋友圈
            wx.onMenuShareTimeline({
                title: shareData.title, // 分享标题
                desc: shareData.desc, // 分享描述
                link: shareUrl, // 分享链接
                imgUrl: shareData.imgUrl, // 分享图标
                success: function () {
                    console.log('wxConfig 分享成功')
                    if (shareCallBack) {
                        return shareCallBack()
                    }
                },
                cancel: function () {
                    console.log('取消分享')
                }
            })
            // 分享好友
            wx.onMenuShareAppMessage({
                title: shareData.title, // 分享标题
                desc: shareData.desc, // 分享描述
                link: shareUrl, // 分享链接
                imgUrl: shareData.imgUrl, // 分享图标
                success: function () {
                    console.log('wxConfig 分享成功')
                    if (shareCallBack) {
                        return shareCallBack()
                    }
                },
                cancel: function () {
                    console.log('取消分享')
                }
            })
            if (readyCallBack) { // 微信配置初始化成功后回调
                return readyCallBack()
            }
            Vue.prototype.$loading(false)
        })

        wx.error(function (res) {
            console.log(res)
            // alert(JSON.stringify(res))
        })
    },
    getLocation: function (callBack) {
        wx.getLocation({
            type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
            success: function (res) {
                return callBack(res)
            },
            fail: function (res) {
                alert(JSON.stringify(res))
            }
        })
    },
    openLocation: function (longitude, latitude, name, address, scale) {
        wx.openLocation({
            longitude: Number(longitude),
            latitude: Number(latitude),
            name: name, // 位置名
            address: address, // 地址详情说明
            scale: scale || 13, // 地图缩放级别,整形值,范围从1~28。默认为最大
            fail: function (res) {
                alert(JSON.stringify(res))
            }
        })
    },
    scanQRCode: function (callBack) {
        wx.scanQRCode({
            needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
            scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码，默认二者都有
            success: function (res) {
                // 增加兼容ios 不加延迟 IOS iphone 6S PLUS、iphone 8 PLUS、iphone XR、iphone XS MAX下 在打开扫码那瞬间必须对准  不然不会回调
                return setTimeout(() => {
                    callBack(res.resultStr)
                }, 800)
            },
            fail: function (res) {
                alert(JSON.stringify(res))
            }
        })
    }
}

export default wxConfig
